“Cloud” services provide shared resources, software, and information to computers and other electronic devices upon request. In cloud computing environments, software can be accessible over the internet rather than installed locally on in-house computer systems. Cloud services typically involve over-the-internet provision of dynamically scalable and often virtualized resources. Technological details can be abstracted from the users, who no longer have need for expertise in, or control over, the technology infrastructure “in the cloud” that supports them.
The term “micro-services architecture” refers to an architecture in which each of the micro-services does just one thing efficiently and interacts with others of the micro-services as needed. This contrasts with monolithic architectures in which complex software is run on a single, powerful server. Each of the micro-services may use a different type of hardware and/or software to respectively perform a specialized type of processing different from the types of processing performed by the other micro-services. Moreover, the micro-services architecture allows an application to be decomposed into different ones of these smaller micro-services, improving modularity and making the program code easier to understand, design and test. For example, individual micro-services may be modified (e.g., upgraded, swapped out) without affecting the operation of other micro-services used by the application.
A container-orchestration system (COS) automates deployment, scaling and management of containerized applications (also referred to as containerized software and containerized apps); in other words, it provides a platform for automating deployment, scaling, and operations of application containers across clusters of hosts. For example, Kubernetes is a COS that works with a range of container tools, including Docker. Another example of a COS is Docker Swarm. A container is a self-contained execution environment, such as a Linux execution environment; in other words, a container is a standard unit of software that packages up code and all its dependencies, so the application runs quickly and reliably from one computing environment to another. A container image is used to create one or more containers at runtime. A container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings (e.g., a Docker container image becomes a Docker container when it is run on Docker Engine; another container engine is Rkt).
With regard to hardware, a COS may include: 1) nodes (also referred to herein as COS nodes), where a node is a representation of a single machine in a COS cluster, where that single machine can be a physical machine in a datacenter or virtual machine hosted on a cloud provider: 2) clusters (also referred to herein as COS clusters), where a cluster represents a more powerful machine resulting from pooling the resources (CPUs and RAM) of the nodes within the cluster; and 3) persistent volumes (a persistent volume is a file system that can be mounted to the cluster, without being associated with any particular node; while traditional local storage associated to each node is treated as a temporary cache to hold programs and data).
With regard to software, a COS may include: 1) containers (also referred to as COS containers, Docker containers, etc.); 2) pods (also referred to herein as “replicas,” COS pods,” or “kpods” in a Kubernetes implementation), where a pod is the unit of replication and wraps one or more containers that will share the same resources and local network; 3) deployments, where a deployment manages a pod, including declaring the number of replicas of the pod and monitoring the pods; and 4) ingress, where an ingress refers to a communication channel between a service running in a pod and the outside world, and is typically either an ingress controller, a load balancer, Kube-proxy (a combination of a network proxy and a load balancer). In addition, a COS has support for an abstraction (e.g., a Kubernetes Service) that defines a logical set of pods and a policy by which to access them (sometimes called a micro-service), as well as an API (e.g., Kubernetes Endpoints API) so that the service provided by one of such abstraction can call the service provided by another such abstraction.
In operation, a COS cluster of nodes is formed and a set of one or more persistent volumes is attached to that cluster; and a COS deployment is launched onto the cluster, which deployment causes the spinning up of the declared number of COS pods (where spinning up a COS pod includes executing the containerized application(s) specified in the container image(s) identified for that COS pod) and monitors them.
A COS typically includes a COS controller to control operation of the COS. A COS controller can receive an operation according to configuration information (sometimes referred to as manifests, an “application programming interface (API) object descriptions,” or “application configuration information”) that describes the desired state of an application in terms of COS constructs.